量化交易系统

Quantitative Trading System — 从信号到订单的工程链路:数据、特征、策略、回测、风控、执行、对账、复盘的完整体系

阅读指南:本文梳理行业通用的量化交易系统架构。先看 §0 系统概览 建立全貌;§1 行为视图 回答系统"做什么"(用例→主流程→下单交互→订单状态);§2 结构视图 回答系统"由什么组成"(部署→分层→类);§3 六大模块 逐个拆解工程要点;§4 实战手册 给出从零搭建步骤;§5 速查手册 提供核心接口与参数速查。

0. 系统概览

什么是量化交易系统

量化交易(Quantitative Trading)是用数学模型取代主观判断进行交易决策的交易方式。一个"系统"则是指把这一过程工程化——把数据、特征、策略、回测、风控、执行、对账、复盘八段链路连成一条"不漏数据、不串时间、不丢订单"的流水线。量化交易系统 = 执行 + 验证 + 风控 + 执行质量,缺了后三样,只是自动化的壳。

专有名词:Alpha 与 PnL。Alpha(超额收益)指策略相对基准指数(如沪深300)多赚的那部分收益,是量化系统的核心目标;PnL(Profit and Loss)即盈亏,分理论盈亏与实现盈亏。一个策略在 notebook 里"漂亮",是指其回测 Alpha 显著;系统工程则保证这份 Alpha 在实盘不被滑点、故障、风控事故吃掉。
PlantUML diagram
组件图(结构图 · 宏观总览):八段链路——数据接入→特征工程→信号生成→组合构建→风险控制→订单执行→成交对账→监控复盘,含两条反馈闭环

核心认知:回测 ≠ 实盘

一个量化策略从"在 notebook 里看到一条漂亮的累计收益曲线"走到"在真实账户里持续产生 PnL",至少要穿过四套环境:研究(Research)→ 回测(Backtest)→ 模拟交易(Paper Trading)→ 实盘(Live)。每一步都过滤掉一批"原本以为成立"的假设。

环境解决什么问题典型失败模式
研究 Research从数据里挖掘规律,形成可编程的假设数据窥视(看着答案找规律)
回测 Backtest用历史数据验证策略是否真能赚钱前视偏差、过拟合、幸存者偏差
模拟盘 Paper用实时行情检验回测假设是否成立回测与实盘成交假设不一致(fill rate、滑点)
实盘 Live真实资金、真实成交、真实风控订单状态机、对账、事前风控、灰度事故
专有名词:四套环境交接产物(Artifact)。环境之间靠"产物"交接,而非口头: 研究→回测 交 strategy.yaml + 模型工件;回测→模拟 交回测报告 + "与回测引擎同一接口实现"的声明;模拟→实盘 交 N 天 paper 偏差报告 + 风控审计签字;实盘→研究 交每日 PnL 归因 + 异常订单台账 + 滑点对比。这是一个闭环——实盘里学到的东西必须能流回下一次研究,否则四套环境就退化成"三套独立筒仓 + 一个生产环境"。

1. 行为视图(系统做什么)

1.1 用例图:整体行为

先从最宏观的视角看系统对外提供的全部能力,以及谁在使用它们。

PlantUML diagram
用例图(行为图):系统整体行为——四类参与者 × 九类核心用例
参与者职责主要用例
研究员 Quant发现规律、写成策略数据接入与治理、策略开发、回测与参数优化、模拟盘验证
交易员/运维 Ops跑系统、盯运行模拟盘、实盘交易、订单与持仓管理、监控告警与复盘
风控官 Risk守住风险边界模拟盘、实盘、实时风控与熔断、监管报送
监管 Regulator合规审计监管报送
专有名词:用例(Use Case)。用例图描述"系统对外提供的功能"与"谁在使用"。注意用例是从使用者视角看系统能干什么,而非系统内部怎么实现——内部实现是后续结构图(组件/类)的事。

1.2 活动图:从想法到实盘订单

围绕最核心的主流程逐步细化:一个策略想法如何穿过四套环境,最终变成一笔实盘订单,并形成闭环反馈。

PlantUML diagram
活动图(行为图 · 主流程):四套环境递进——每跨一道环境,就过滤掉一批不成立的假设

把这段流程落到工程上,关键是"环境差异收敛到适配器"。下面是最小可运行的跨环境数据接口演示:

# 环境适配器:同一接口,不同实现
class DataSource(ABC):
    @abstractmethod
    def get_history(self, symbol, start, end): ...

class BacktestSource(DataSource):   # 读历史仓库,禁未来数据
    def get_history(self, symbol, start, end):
        df = hist_store.query(symbol, start, end)
        return df.shift(1)          # 信号只用 T-1 及以前信息(防前视)

class LiveSource(DataSource):       # 接实时行情
    def get_history(self, symbol, start, end):
        return live_feed.bars(symbol, start, end)
专有名词:前视偏差(Lookahead Bias)。用"未来"的数据计算"现在"的信号——例如用当天收盘价算均线、再在同一天买入。回测里没毛病(因为你知道收盘价),实盘里收盘价收盘后才确定,于是信号天然延迟一天。标准做法:日线策略用前一天收盘价计算信号,第二天开盘交易。

1.3 时序图:一次实盘下单的完整交互

主流程里"订单执行"这一段,涉及策略、风控、OMS、EMS、券商、交易所多个组件。时序图把它们之间的消息往来按时间展开。

PlantUML diagram
时序图(行为图 · 细化):一次实盘下单——策略→事前风控→OMS→EMS→券商→交易所→回报→对账

对应到代码,就是 Broker 抽象接口 + OMS 状态更新:

# 执行层:统一 Broker 接口
class Broker(ABC):
    def submit_order(self, order): ...
    def get_order_status(self, order_id): ...
    def cancel_order(self, order_id): ...

# 实盘下单流程(伪代码)
if risk.pre_trade_check(order):        # 事前风控在订单送出前拦截
    oid = broker.submit_order(order)   # 不假设成交,等待交易所回报
    while True:
        st = broker.get_order_status(oid)
        if st in (FILLED, CANCELLED, REJECTED): break
        if timeout: broker.cancel_order(oid); break
        sleep(0.1)
    return st                            # 成交结果必须回写给策略层
专有名词:OMS 与 EMS。OMS(Order Management System,订单管理系统)跟踪订单生命周期,是"订单状态权威记录";EMS(Execution Management System,执行管理系统)负责把订单路由到交易所/券商,并执行执行算法(TWAP/VWAP 等)与协议翻译(如 FIX)。EMS 是内部交易逻辑与外部交易所之间的桥。

1.4 状态机:订单生命周期

订单从创建到终态,经历一组确定的合法状态迁移。状态机是 OMS 的骨架——状态机写对了,断线恢复、超时撤单、部分成交才有依据。

PlantUML diagram
状态机图(行为图 · 细化):订单生命周期——PENDING→(PARTIAL)→FILLED/CANCELLED/REJECTED
# OMS 订单状态机(简化实现)
ORDER_STATES = ["PENDING", "PARTIAL", "FILLED", "CANCELLED", "REJECTED"]
TRANSITIONS = {
    "PENDING":  {"PARTIAL", "FILLED", "CANCELLED", "REJECTED"},
    "PARTIAL":  {"FILLED", "CANCELLED"},
}

def transition(order, new_state):
    if new_state in TRANSITIONS[order.status]:
        order.status = new_state
        audit_log(order)
    else:
        raise IllegalState(f"{order.status} -> {new_state}")
专有名词:Cancel/Replace(改单)。限价单挂出后价格没到,可以撤单(Cancel)或改价重发(Cancel/Replace)。实盘系统对"未成交超时"的标准处理是自动撤单 + 按规则重发,避免订单挂在场里"僵尸化"。

2. 结构视图(系统由什么组成)

2.1 部署图:四套环境拓扑

从宏观架构看系统部署:四套环境各自独立部署,共享一套数据服务、配置中心与监控设施。

PlantUML diagram
部署图(结构图 · 宏观):研究→回测→模拟→实盘四套环境 + 共享基础设施,实盘→研究是反馈闭环
专有名词:灰度发布(Canary / Gradual Rollout)。实盘环境不允许"一键全量上线"。标准做法是:小额资金试跑 → 逐步放量 → 任意一档出问题立刻退回上一档。任何一次小步放量后,必须有"立刻退回"的能力:配置走版本化可回滚、进程支持热 reload、风控 Kill Switch 独立于策略进程、兜底平仓器能在策略被杀时独立把仓位降到零。

2.2 组件图:分层架构(六层核心抽象)

四套环境之所以能复用同一份策略代码,靠的是把整个交易系统垂直切成一组接口:策略只依赖接口,不依赖实现。这套六层抽象是文档最重要的架构决策。

PlantUML diagram
组件图(结构图 · 中间层):六层抽象接口——数据接入、特征、信号、组合、订单、风险;环境差异收敛到适配器
层接口职责实盘与回测的差异
数据接入 Data提供行情/历史数据,格式统一回测读历史仓库(防未来函数);实盘接实时流(处理延迟、保证连续)
特征 Feature把原始 bar 转成特征向量两边一致(同一套特征定义)
信号 Signal根据行情 + 持仓生成买卖信号两边一致(只返回信号,不下单)
组合 Portfolio目标权重、调仓、持仓跟踪回测虚拟撮合 vs 实盘真实持仓回报
订单 Order订单模型 + OMS 状态机实盘才有 tick size / lot size / 停牌限制
风险 Risk事前风控 + 实时监控实盘要求毫秒级事前检查;回测可事后看
专有名词:适配器模式(Adapter)。六层接口之上是统一的策略代码,接口之下是"环境适配器"——回测模拟器、模拟盘撮合、实盘券商接口。适配器解决的核心问题:同一份策略在不同环境绝不走不同代码路径。Knight Capital 2012 年 4.6 亿美元巨亏的根因之一,正是研究/生产部署版本不一致 + 断线状态恢复缺陷。

2.3 类图:核心抽象

向下细化到内部细节:核心类及其依赖关系。这是"六层抽象"的代码形态。

PlantUML diagram
类图(结构图 · 内部细节):StrategyCore 只依赖六个接口;Broker 有三个环境实现(回测/模拟/实盘)
# 三套 Broker 实现:策略代码完全无感
class BacktestBroker(Broker):
    def submit_order(self, order):
        return fill_model(order, slippage_model=TWAP_SLIPPAGE)

class PaperBroker(Broker):
    def submit_order(self, order):
        return virtual_exchange.match(order)   # 按实时价模拟成交

class LiveBroker(Broker):
    def submit_order(self, order):
        return api.submit(order)               # QMT / xtquant / ccxt / FIX

3. 六大核心模块详解

3.1 数据层

数据是量化系统的"原料"。数据层负责获取、清洗、对齐、存储,同时保证两点铁律:数据必须可信(无未来函数、无脏数据)、必须可复现(回测与实盘拿到的数据格式一致)。

子能力要点
数据源接入行情(OHLCV)、基本面、另类数据(舆情/卫星/交易流水);数据商如 Tushare/AKShare/baostock/ccxt;统一抽象 DataSource → get_history()
清洗与复权剔除停牌/ST、处理涨跌停;前复权 vs 后复权口径统一(用 adj_factor 字段)
PIT 数据Point-In-Time(时点)数据:基本面字段必须"到发布日才可见",禁止用后补数据回填
存储日频用关系库(MySQL 按年分区);分钟级/高频用时序库(InfluxDB/TimescaleDB/ClickHouse);缓存层 Redis
幸存者池股票池必须含历史退市/停牌股票,否则回测天然高估(幸存者偏差 Survivorship Bias)
专有名词:PIT(Point-In-Time)。指数据在"某个时点上实际可知"的状态。典型坑:财报是 T 日发布的,但数据库里"利润"字段是后来修订过的——回测用修订值等于偷看未来。正确做法是存"发布时快照",策略只用发布日之后可见的值。

3.2 策略层

策略层承载信号生成与组合构建。它是"策略注册中心"——每个策略实现统一接口、声明参数,系统自动发现、自动映射到仪表盘。策略逻辑本身是各异的,但接口必须统一。

# 策略统一接口(注册中心模式)
class Strategy(ABC):
    params: dict

    @abstractmethod
    def on_bar(self, bar): ...
    @abstractmethod
    def on_signal(self, signal) -> SignalDecision: ...

    def target_weights(self) -> dict:     # 组合层要的目标权重
        return {...}

# 示例:双均线交叉
class DualMA(Strategy):
    def on_bar(self, bar):
        fast = sma(bar, self.params["fast"])
        slow = sma(bar, self.params["slow"])
        if cross_up(fast, slow): return SignalDecision(BUY, weight=0.5)
专有名词:策略注册中心(Strategy Registry)。用注册表 + 抽象基类实现"可插拔":新增策略只需写一个子类 + 注册,无需改动回测引擎、风控、执行任何代码。关注点分离(数据/策略/风控/执行各管各的)是量化系统的设计原则。

3.3 回测引擎

回测引擎只保证"语法对",真正杀死策略的是"逻辑错、数据脏、推断不严"。回测引擎的核心是事件驱动:MarketEvent → Signal → Order → Fill → 绩效报告,逐事件推进,与实盘同一套路径。

PlantUML diagram
活动图(行为图 · 细化):回测与上线前验证——Walk-forward 滚动窗口 + 多重检验 + 模拟盘试运行
专有名词:三大回测陷阱。 ① 前视偏差 Lookahead Bias——用了未来的数据算现在的信号(见 §1.2); ② 过拟合 Overfitting——参数在历史上调到完美,换段数据就失效;缓解:Walk-forward(滚动训练/验证窗)、限制参数个数; ③ 数据窥视 Data Snooping——在全部历史上来回试策略,总有一个"看起来显著";缓解:多重检验校正(Bonferroni、BH-FDR)、Deflated Sharpe、上线前 30 条自检清单。

3.4 风控层

风控是量化系统与普通程序的最大区别。它必须独立于策略代码运行,在订单网关与策略之间,毫秒级完成检查。风控分三个时刻:事前(pre-trade)、事中(in-flight)、事后(post-trade)。

时刻检查项触发动作
事前
订单送出前
单笔订单金额上限拒单 + 审计留痕
单标的累计敞口上限拒超限开仓
账户 gross/net 敞口上限暂停新开仓
单位时间订单速率上限(防 runaway)限速 / 熔断
价格偏离参考价百分比(防 fat finger)、黑名单拒单
事中回撤、日亏损、集中度实时监控暂停所有新开仓 / 强制平仓
事后盘后对账、偏差分析留痕 + 归因,反馈研究
# 事前风控:独立于策略进程的规则表
RULES = [  # (scope, key, limit)
  ("account", "gross_exposure", 1_000_000),
  ("symbol",  "position_pct",   0.30),
  ("account", "max_drawdown",   0.20),
  ("account", "daily_loss",     0.05),
]

def pre_trade_check(order, state) -> bool:
    for scope, key, limit in RULES:
        val = state.get(scope, order, key)
        if val > limit:
            audit(order, f"{scope}.{key} {val}>{limit}")   # 任何规则触发立刻留痕
            return False
    return True
专有名词:Kill Switch(一键熔断)。运行在独立服务的"总开关",不依赖策略进程本身——能在策略进程失控时单方面阻止新订单 + 一键全撤。仓位平仓必须有独立 path(兜底平仓器),不依赖策略代码。美国 SEC Rule 15c3-5(Market Access Rule)强制要求券商在订单送出前完成净敞口、单笔金额、错指令(fat-finger)三项检查。

3.5 执行层

执行层把"风控放行的订单"变成"交易所里的成交"。最容易忽略的坑:不假设一定能成交。回测里下买单默认下一秒成交;实盘可能有流动性不足、滑点、网络延迟。

子模块职责要点
OMS 订单管理订单状态机、超时撤单、改单重发状态机见 §1.4;等待交易所确认而非假设成交
EMS 执行算法TWAP / VWAP / 冰山单拆单大单拆小单,降低市场冲击;执行质量直接影响 PnL
券商接口FIX 协议 / 券商 APIFIX 是电子交易行业标准协议;协议翻译、断线重连
对账 Recon本地状态 vs 券商/交易所状态比对差异写入 reconciliation 日志;未完成对账前禁止发新单(hold-on)
专有名词:TWAP / VWAP。TWAP(Time-Weighted Average Price)把大单按时间等额拆成小单;VWAP(Volume-Weighted Average Price)按成交量分布拆单,目标是让成交均价贴近一段时间内的市场均价。这是"执行质量"的两种基础算法。

3.6 监控与复盘

实盘不是"挂上就跑"。工程重点四大件:订单状态机、对账、事前风控、灰度发布——这四件事任何一件没做扎实,策略再好也会被生产路径上的事故抹平。

能力内容
实时监控持仓、敞口、PnL、订单状态、行情延迟;异常触发短信/电话告警
绩效归因每日 PnL 归因(市场/行业/因子/残差),回答"钱从哪里赚/亏的"
异常台账异常订单、风控触发记录、滑点对比——全部留痕可审计
复盘闭环实盘结果回馈研究:修正滑点假设、特征定义,进入下一轮回测
行业教训:Knight Capital(2012)。部署版本不一致 + 断线状态恢复缺陷,导致其市值管理系统在 45 分钟内爆亏约 4.6 亿美元,公司随后被收购。核心启示:版本一致性 + 对账 + 事前风控 + Kill Switch 缺一不可——这正是本系统结构视图里"共享配置中心 + 独立风控服务 + 兜底平仓器"要解决的问题。

4. 实战操作手册(从零搭建一个量化系统)

以下按"最小可用 + 渐进完善"路径,适合个人/小团队从零搭建。技术栈以 Python 生态为例(研究/低频策略场景),高频场景需 C++/FPGA 另行考量。

4.1 技术栈选型

层推荐选型理由
数据AKShare(免费)/ Tushare Pro / baostock;ccxt(加密)无需 Token 或低成本,可插拔抽象
存储MySQL / SQLite(日频)→ 后续 ClickHouse日频数据量小,关系库够用
回测自研事件驱动引擎 / Backtrader / Qlib自研才能保证回测=实盘同接口
风控独立模块 risk/(allocator + sizing + stops)与策略进程隔离,独立风控守护
执行模拟盘 PaperBroker → 实盘 QMT/xtquant(A股)先跑通模拟盘再碰实盘
界面Streamlit 仪表盘(策略/回测/风控/模拟盘页)策略参数自动映射为滑块

4.2 搭建步骤

  1. 建目录骨架:data/ strategies/ backtest/ risk/ execution/ dashboard/ tests/——对应 §2.2 的六层抽象。
  2. 写数据适配器:实现 DataSource.get_history(),先接一个免费源,存本地 SQLite。
  3. 写第一个策略:双均线交叉(§3.2 示例),实现 Strategy 接口。
  4. 写事件驱动回测引擎:MarketEvent → Signal → Order → Fill → 报告(§3.3),含滑点/手续费模型。
  5. 写风控模块:仓位(等权/Kelly/波动率目标)、止损(固定/ATR/移动)、独立风控守护(§3.4)。
  6. 跑模拟盘:PaperBroker 按实时价模拟成交,与回测对比 PnL 偏差(§1.2 活动图的"偏差可接受?"卡点)。
  7. 灰度实盘:小额资金 → 事前风控开启 → 逐步放量 → 随时可回退(§2.1)。
  8. 复盘闭环:每日 PnL 归因 + 滑点校准,把结论写回研究(§3.6)。
上线前 30 条自检清单(要点版):数据是否 PIT?有无幸存者偏差?特征是否只用 T-1 及以前?参数是否 Walk-forward 验证?多重检验是否校正?滑点/手续费是否保守?风控是否独立进程?Kill Switch 是否可用?对账是否完成才发单?灰度是否有回退路径?

4.3 常见踩坑与对策

坑症状对策
回测一套代码、实盘另一套研究字段实盘是 nan,实盘限价单被拒六层接口统一 + 适配器收敛差异(§2.2)
假设一定成交实盘成交率远低于回测不假设成交,等回报,超时撤单(§1.3)
风控放在执行之后订单已发出才被拦风控必须在策略层与执行层之间、下单之前(§3.4)
涨跌停/tick size 没校验实盘订单被拒Broker 层加规则校验(A股 T+1、涨跌停、最小单位)

5. 参数指令速查手册

5.1 核心接口速查

接口方法说明
DataSourceget_history(symbol, start, end)
get_quotes(symbols)
统一数据入口,回测/实盘同格式
Strategyon_bar(bar)
on_signal(signal)
target_weights()
策略只产出信号/权重,不下单
RiskManagerpre_trade_check(order)
exposure(account)
独立进程,毫秒级事前检查
Brokersubmit_order / get_order_status / cancel_order / get_positions / get_balance回测/模拟/实盘三套实现
OMS订单状态机 + 超时撤单 + 改单订单状态权威记录

5.2 订单类型速查

类型语义适用
市价单 Market立即按当前最优价成交确定性优先(止损、平仓)
限价单 Limit以指定价或更优价成交,不保证成交控制成本(入场)
止损单 Stop价格触及触发价后转市价止损、趋势突破
条件单 / OCO触发条件才报单;一个成交则撤另一个止盈止损配对
算法单(TWAP/VWAP)拆单执行大单降冲击

5.3 风控规则参数速查

参数 (scope, key)典型默认值触发动作
account.gross_exposure≤ 账户权益上限拒开仓
symbol.position_pct≤ 30%拒超限开仓
account.max_drawdown≤ 20%暂停全部新开仓
account.daily_loss≤ 5%当日停止 / 强制减仓
order.max_amount单笔上限拒单(防 fat finger)
order.max_rate单位时间订单数上限限速 / 熔断(防 runaway)
price.max_deviation偏离参考价 ±N%拒单

5.4 仓位方法速查

方法公式/思想适用
固定比例每笔固定占比简单稳健
Kelly 公式f* = p - q/b(半 Kelly 上限 ~25%)有胜率优势时,防过度下注
风险平价按波动率倒数分配多资产组合
波动率目标仓位 ∝ 目标波动/实际波动控制组合波动率

6. 开源实现对照

有没有开源项目"完整实现"了本文档描述的一套量化系统?答案是:有,但"完整"要按市场与场景拆开看。没有任何开源项目 100% 覆盖"对账、绩效归因、灰度发布、Kill Switch 兜底平仓"这类生产级运维——这些通常仍是自建部分。这正说明为什么商业量化公司普遍"框架开源、运营闭源"。

PlantUML diagram
组件图(结构图 · 对照):主流开源项目 × 本文档系统模块的覆盖关系——第一梯队全流程,第二梯队研究/回测,第三梯队垂直场景

6.1 主流开源项目一览

项目市场语言覆盖度定位
vn.py (VeighNa)A股/期货/期权/加密Python★★★★★国内最全:40+ gateway(CTP/XTP/IB/币安)+ CTA回测/实盘 + 算法交易 + 价差/期权 + risk_manager 风控 + RPC 分布式;4.0 新增 vnpy.alpha(因子/ML 投研)
Nautilus Trader多资产Rust+Python★★★★★事件驱动、机构级低延迟,回测与实盘同接口,内建风控引擎,架构最接近"生产级"
QuantConnect LEAN全球多资产C#/Python★★★★☆功能最全(37.5万+实盘策略部署),实盘通常走 QuantConnect 云/券商,自托管 live 门槛高
Freqtrade加密 onlyPython★★★★☆加密最完整:回测+超参优化+实盘+Telegram 控制+止损
Qlib (微软)研究向Python★★★☆☆ML 全流程(因子→模型→回测→组合→订单生成),实盘下单/执行不在范围内
QUANTAXIS多市场Python/Rust★★★★☆数据→因子→回测→实盘→微服务一站式,MongoDB/ClickHouse + RabbitMQ 分布式
Backtrader多市场Python★★☆☆☆经典回测框架(已停止更新),仅回测+部分实盘;仍是业界标杆
Zipline-Reloaded多市场Python★★☆☆☆Quantopian 遗产社区维护版,研究/回测向,与 Pandas 深度集成
Hummingbot加密 onlyPython★★★☆☆做市专用(CEX/DEX),实时做市与套利

6.2 与本文档架构的模块映射

把各项目对照本文档 §2.2 的六层抽象 + §3 的生产级运维模块,覆盖情况如下(●=完整实现,◐=部分/需自补,○=缺失/范围外):

项目数据因子/特征信号/策略回测组合/仓位订单执行风控对账/监控
vn.py●◐ (vnpy.alpha)●●◐●●◐
Nautilus Trader●◐●●◐●●◐
QuantConnect LEAN●◐●●●●◐◐
Freqtrade● (加密)◐●●◐● (加密)◐◐
Qlib●●● (ML)●●○ (只生成订单)○○
QUANTAXIS●●●●◐●◐◐
结论:国内多市场选 vn.py(与本文档六层架构最贴合,事件驱动引擎 + gateway=Broker 适配器 + risk_manager=事前风控);机构级低延迟参考 Nautilus Trader;加密选 Freqtrade;AI/因子研究选 Qlib。对账、绩效归因、灰度发布、Kill Switch 兜底平仓普遍需自建——把它们当作"框架之上的自有层"来规划。

6.3 生态资源索引:awesome-quant 精选

§6.1 解决"整框架选谁",本节解决"组件/工具选谁"。awesome-quant(wilsonfreitas/awesome-quant,29.4k+ stars)是量化金融开源库的策展目录,按约 19 大主题收录 Python/R/Julia/Java/Rust 等各语言项目,适合当作"找工具的入口"。以下按本文档六层架构精选高频库(与 §6.1 框架级条目不重复):

数据层:行情源与存储

库语言用途
yfinancePythonYahoo Finance 行情/基本面免费数据,研究与原型最常用
ccxtPython100+ 加密交易所统一 API,行情+下单,实盘/回测皆可
akshare / tusharePythonA股/港美股数据源(akshare 免费聚合、tushare 积分制),覆盖行情/财务/宏观
pandas-datareaderPython多来源财经数据统一接口(FRED/Yahoo/Stooq 等)
ArcticDBPython时序/逐笔 tick 高频存储,适合自建数据仓库

特征/因子层:数值、统计与时序建模

库语言用途
pandas / polarsPythonDataFrame 基础设施;polars 面向大数据量/向量化回测性能
statsmodelsPython统计建模:回归、协整、OLS/GLS、假设检验
ARCHPythonARCH/GARCH 族波动率建模
pmdarimaPythonARIMA/SARIMA 自动定阶(auto_arima)

技术指标

库语言用途
TA-LibPython最全指标库(150+ 指标),C 核心性能高,安装略重
taPython纯 pandas 实现,轻量易装
finta / pandas_talibPython常见指标 pandas 实现,适合快速原型
TTRRR 生态技术指标/交易规则标准库

回测引擎(§6.1 之外的补充)

库语言用途
Backtesting.pyPython轻量事件驱动回测,API 简洁、出图友好,个人研究首选
vectorbtPythonNumPy 向量化回测,可并行扫描海量参数组合
btPython组合级回测(alignment-based),适合多资产轮动研究
pyqstratPython快速、可扩展、透明,含执行/成本建模
purgedcvPython去泄漏交叉验证(CPCV、walk-forward)、回测过拟合统计(PBO、夏普收缩),对应 §4.2 防过拟合方法
quantstatsPython绩效报告 HTML/图(回撤、夏普、最大回撤、月度热力图)

组合优化与风控

库语言用途
PyPortfolioOptPython均值方差/Black-Litterman/风险平价,scipy 求解
Riskfolio-LibPython组合优化与风险管理库,支持 CVaR/CDaR/最大回撤约束等前沿目标
ffnPython金融指标函数库:收益/回撤/夏普/绩效对比

期权/衍生品定价(研究向工具)

库语言用途
PyQLPythonQuantLib 的 Python 封装,金融工程全功能
FinancePyPython固收/权益/FX/信用衍生品定价与风险管理
gs-quantPython高盛开源的量化工具包(定价/风险/数据集)
vollibPython期权定价+隐含波动率+Greeks,轻量
tf-quant-financePythonTensorFlow 高性能衍生品定价/蒙特卡洛

实盘/执行(§6.1 之外的补充)

库语言用途
pylivetraderPythonzipline 兼容接口的实盘库,回测→实盘平滑迁移
algobrokerPython算法交易执行引擎(对接券商/交易所)
aatPython异步算法交易引擎,研究/回测/实盘统一
BlanklyPython回测+模拟+实盘一体,多券商/交易所接入
使用建议:把 awesome-quant 当作"找工具的目录"而非"必装清单"。选型顺序:先按 §6.1 定整体框架,再按本文档六层架构在此索引中逐层选组件;语言生态上,量化研究以 Python 为主、R 偏学术统计、Julia 强调性能、Rust/Go 偏向生产级低延迟执行。该清单条目持续更新,落地前请核对项目维护状态与许可证。

附录:监管与合规

量化/程序化交易受所在司法辖区监管,上线前必须单独审计:

辖区法规核心要求
美国SEC Rule 15c3-5(Market Access)订单送出前完成净敞口、单笔金额、错指令(fat-finger)检查
美国Reg SCI系统合规与完整性:事件报告、故障恢复、测试要求
欧盟MiFID II RTS 6算法交易治理:事前风控、Kill Switch、监管报送、压力测试
中国证监会《程序化交易管理规定》程序化交易报备、事前风控要求、异常交易监控

文末提示:本文聚焦工程架构,不构成投资建议或交易系统认证;文中接口、状态机、阈值仅用于阐释方法论,模拟盘的盈利从来不能保证实盘可复制。